package org.mybatis.example;

import org.apache.ibatis.reflection.factory.DefaultObjectFactory;

import java.util.Collection;
import java.util.List;
import java.util.Properties;

/**
 * 每次MyBatis创建一个结果对象的新实例时，它都会使用一个ObjectFactory实例来完成这项工作。默认ObjectFactory仅使用默认构造函数实例化目标类，
 * 如果存在参数映射，则使用参数化构造函数。如果您想要覆盖ObjectFactory的默认行为，您可以创建自己的行为。例如:
 */
public class ExampleObjectFactory extends DefaultObjectFactory {
  @Override
  public <T> T create(Class<T> type) {
    return super.create(type);
  }

  @Override
  public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes, List<Object> constructorArgs) {
    return super.create(type, constructorArgTypes, constructorArgs);
  }

  @Override
  public void setProperties(Properties properties) {
    super.setProperties(properties);
  }

  @Override
  public <T> boolean isCollection(Class<T> type) {
    return Collection.class.isAssignableFrom(type);
  }
}
